<template>
  <div ref="editor" class="text-editor"></div>
</template>

<script>
// 引入富文本编辑器
import E from 'wangeditor'
import { uploadCourseImage } from '@/services/course'

export default {
  name: 'TextEditor',
  props: {
    value: {
      type: String,
      default: ''
    }
  },
  data () {
    return {
      editor: null,
      isLoaded: false
    }
  },
  watch: {
    value () {
      if (!this.isLoaded) {
        this.editor.txt.html(this.value)
        this.isLoaded = true
      }
    }
  },
  // 由于需要进行 DOM 操作，使用 mounted 钩子
  mounted () {
    // 初始化富文本编辑器
    this.initEditor()
  },
  methods: {
    initEditor () {
      // 创建富文本编辑器实例
      const editor = new E(this.$refs.editor)
      editor.config.onchange = function (value) {
        this.$emit('input', value)
      }
      // 配置 自定义上传图片 功能
      editor.config.customUploadImg = async function (resultFiles, insertImgFn) {
        // 发送请求（参数需要 FormData 类型）
        const fd = new FormData()
        fd.append('file', resultFiles[0])
        const { data } = await uploadCourseImage(fd)
        if (data.code === '000000') {
          // 根据地址创建 img 并插入到富文本编辑器
          insertImgFn(data.data.name)
        }
      }
      // 初始化富文本编辑器
      editor.create()
      editor.txt.html(this.value)
      // 保存文本编辑器实例，便于 watch
      this.editor = editor
    }
  }
}
</script>

<style lang="scss" scoped></style>
